// pages/publicShareDetail/index.ts
import {createShareAppMessageInfo, handleCode, handleErrCode} from "../../utils/util";
import {taskExecuteIsSysUserRead, taskExecuteReadTime, taskExecuteShareRead} from "../../service/api/api-promotion";
import {DEFAULT_CODE} from "../../utils/enmu";

Page({

    /**
     * 页面的初始数据
     */
    data: {
        task: {},// 当前的任务内容对象
        url: '',// 目标地址
        timer: 0,// 纪录阅读时间的计时器
        times: 0,// 纪录阅读时间数量
        percentage: 0,// 纪录阅读时间数量
        countdown: 0,// 倒计时
        shareAccountId: '',// 第一个分享人的id
        isDemandShareRead: false,// 是否要执行分享阅读
        showTimer: false,// 是否显示右侧计时器
        showShare: false,// 是否显示分享按钮
        currentReadUser: {},// 当前阅读的用户信息
        options: {},// 传入option
        wxCodes: [],// 之前一些分享用户的前辈信息，[]
        dropdownShow: false,// 是否显示底部分享
        isPromoterAccount: false,// 当前进入是否是发起人
        ShareReadData: '',// 接口请求的返回数据
        curColor: '#FF814A',// 当前的颜色
        // curColor: '#389E0D',// 当前的颜色
        curFont: 20,// 当前字体大小
        onWebViewLoadOver: false,// webview是否加载完成
        isSysUser: false,// 是否是系统用户
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        // wx.hideHomeButton();// 隐藏左上角小房子
        // console.log('publicShareDetail onLoad', options);
        const {url, wxCodes, shareAccountId, task: data} = options;
        const task = JSON.parse(decodeURIComponent(data))
        this.setData({
            options,
            url,
            shareAccountId,
            task,
            isDemandShareRead: task.isDemandShareRead === 1,
            wxCodes: JSON.parse(wxCodes)
        })
        const _that = this;
        setTimeout(() => {
            _that.setData({
                showShare: true,
            })
            _that.curReadUserCheck();// 请求一下，分享阅读接口
        }, 1000)
    },

    /**
     * 页面加载成功时
     */
    onWebViewLoad(e) {
        console.log('onWebViewLoad', e);
        // 开始计时
        this.setData({
            onWebViewLoadOver: true
        })
        this.startCountDownCheck() && this.tikTokFun()
    },

    /**
     * 判断是否可以开始计时
     * 是签到推广发起人(因为是发起人，就不会是管理员，并且是系统用户)，webview加载成功，两个个条件
     */
    startCountDownCheck() {
        return this.data.isPromoterAccount && this.data.onWebViewLoadOver
    },

    /**
     * 时间计时器
     */
    async tikTokFun(loop = false) {
        const {data: {task, timer, times}} = this;
        clearTimeout(timer);
        let _that = this;
        if (task.executeReadTime) {// 已经统计过一次读文章
            return
        }
        if (task && task.isDemandReadTime !== null && typeof task.isDemandReadTime !== "undefined") {
            this.setData({
                showTimer: true,
                eachTime: 100 / task.isDemandReadTime
            })
            if (times >= task.isDemandReadTime) {// 计时统计完了，调用接口通知一下后台
                clearTimeout(timer);
                _that.setData({
                    curColor: '#389E0D',// 完成绿色
                    curFont: 14,
                    countdown: '完成',
                })
                // 1.5s后隐藏计时器
                setTimeout(()=>{
                    _that.setData({
                        showTimer: false,
                    })
                }, 1500)
                await taskExecuteReadTime({
                    taskId: task.id,
                }).then(res => {
                    handleCode(res, '阅读任务完成');
                }).catch(e => {
                    console.warn(e);
                    handleErrCode('计时失败')
                }).finally(() => {
                    _that.setData({
                        timer: null,
                        times: 0,
                        percentage: 0,
                        countdown: 0,
                    })
                })
            } else {
                // 初次设置一下初始值
                if (!loop) {
                    this.setData({
                        countdown: task.isDemandReadTime,
                        percentage: 0,
                    })
                }
                // 继续计时
                this.data.timer = setTimeout(() => {
                    let newVal = _that.data.times + 1;
                    let countdown = task.isDemandReadTime - newVal;
                    let percentage = Number(((newVal / task.isDemandReadTime) * 100).toFixed(0));
                    // console.log(newVal);
                    // console.log(countdown);
                    // console.log(percentage);
                    _that.setData({
                        times: newVal,
                        percentage,
                        countdown
                    })
                    _that.tikTokFun(true)
                }, 1000)
            }
        } else {
            console.warn('task.isDemandReadTime is null or undefined')
        }
    },


    /**
     * 页面加载失败时
     */
    onWebViewError(e) {
        console.log(e);
        handleErrCode('获取失败')
    },

    /**
     * 检查一下当前阅读的用户是否存在，不存在重新获取一下
     */
    curReadUserCheck() {
        const App = getApp();
        let {globalData: {currentReadUser = {}}} = App;
        if (currentReadUser.code) {
            this.checkUserFun()
        } else {
            wx.login({
                success: res => {
                    App.globalData.currentReadUser = {code: res.code};// 存一下当前阅读的用户信息
                    this.checkUserFun()
                },
            })
        }
    },

    /**
     * 判断当前进入用户是否是系统用户
     */
    async checkUserFun() {
        let _that = this;
        // 执行搜索函数
        const {globalData: {currentReadUser = {}}} = getApp();
        await taskExecuteIsSysUserRead({
            readWxampCode: currentReadUser.code || DEFAULT_CODE,// 当前阅读人
        }).then(async (res) => {
            const {isUserAccount} = res.data || {};
            const isSysUser = isUserAccount === 1;// 等于1就是系统用户
            const App = getApp();
            App.globalData.isSysUser = isSysUser;// 存到全局
            if (!isSysUser) {
                console.warn('===== not sysUser=====')
                wx.hideHomeButton();// 隐藏左上角小房子
            }
            _that.setData({
                isSysUser
            })
            _that.data.isDemandShareRead && _that.promoterFun();// 去执行分享阅读
        }).catch(error => {
            handleErrCode(error, 'none')
            wx.hideHomeButton();// 隐藏左上角小房子
        }).finally(() => {
        })
    },

    /**
     * 执行分享阅读请求
     */
    async promoterFun() {
        let _that = this;
        // 执行搜索函数
        let {task, wxCodes, shareAccountId} = this.data;
        const {globalData: {currentReadUser = {}}} = getApp();
        this.setData({
            shareAccountId
        })
        await taskExecuteShareRead({
            taskId: task.id,// 任务id
            promoterAccountId: shareAccountId,// 发起人
            chainIds: wxCodes,// 阅读人列表
            readWxampCode: currentReadUser.code || DEFAULT_CODE,// 当前阅读人
        }).then(async (response) => {
            _that.handleData(response)
        }).catch(error => {
            console.warn('=====taskExecuteShareRead error=====' + error)
            handleErrCode(error,'none')
            wx.hideHomeButton();// 隐藏左上角小房子
        }).finally(() => {
        })
    },

    /**
     * 处理分享阅读请求返回
     */
    handleData(res = {}) {
        this.setData({
            ShareReadData: JSON.stringify(res)
        })
        // wx.showToast({
        //     title: this.data.ShareReadData,
        //     icon: "none",
        //     duration: 3000
        // })
        const {chainIds, isPromoterAccount} = res.data || {};
        this.setData({
            wxCodes: chainIds,
            isPromoterAccount,
        });
        if (this.startCountDownCheck()) {// 如果是发起人角色，去执行阅读任务操作
            this.tikTokFun();
        }
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {
        wx.showShareMenu({
            withShareTicket: true,
            menus: [
                'shareAppMessage', // 分享给朋友
                'shareTimeline',// 分享到朋友圈
            ]
        })
    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {
        return
    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage(options) {
        console.log('阅读分享', options)
        if (options.from === 'button') {
            console.log("来自页面内转发按钮");
            console.log(options.target);
        } else {
            console.log("来自右上角转发菜单")
        }
        let {wxCodes, url, shareAccountId, task} = this.data;
        const info = createShareAppMessageInfo(task, shareAccountId, wxCodes, 'pages/publicShareDetail/index', url)
        return {
            ...info,
            success: (res) => {
                console.log("转发成功", res);
            },
            fail: (res) => {
                console.log("转发失败", res);
            }
        }

    },
})